summaryrefslogtreecommitdiff
path: root/app/[lng]/evcp/(evcp)/(procurement)/rfq-last/page.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'app/[lng]/evcp/(evcp)/(procurement)/rfq-last/page.tsx')
-rw-r--r--app/[lng]/evcp/(evcp)/(procurement)/rfq-last/page.tsx51
1 files changed, 49 insertions, 2 deletions
diff --git a/app/[lng]/evcp/(evcp)/(procurement)/rfq-last/page.tsx b/app/[lng]/evcp/(evcp)/(procurement)/rfq-last/page.tsx
index ab63c14f..6830dbe9 100644
--- a/app/[lng]/evcp/(evcp)/(procurement)/rfq-last/page.tsx
+++ b/app/[lng]/evcp/(evcp)/(procurement)/rfq-last/page.tsx
@@ -37,14 +37,16 @@ interface RfqPageProps {
// 탭별 데이터 카운트를 가져오는 함수
async function getTabCounts() {
try {
- const [generalData, itbData, rfqData] = await Promise.all([
+ const [generalData, preBiddingData, itbData, rfqData] = await Promise.all([
getRfqs({ page: 1, perPage: 1, sort: [], filters: [], joinOperator: "and", search: "", rfqCategory: "general" }),
+ getRfqs({ page: 1, perPage: 1, sort: [], filters: [], joinOperator: "and", search: "", rfqCategory: "pre_bidding" }),
getRfqs({ page: 1, perPage: 1, sort: [], filters: [], joinOperator: "and", search: "", rfqCategory: "itb" }),
getRfqs({ page: 1, perPage: 1, sort: [], filters: [], joinOperator: "and", search: "", rfqCategory: "rfq" }),
]);
return {
general: generalData.total || 0,
+ pre_bidding: preBiddingData.total || 0,
itb: itbData.total || 0,
rfq: rfqData?.total || 0,
};
@@ -52,6 +54,7 @@ async function getTabCounts() {
console.error("Error fetching tab counts:", error);
return {
general: 0,
+ pre_bidding: 0,
itb: 0,
rfq: 0,
};
@@ -76,6 +79,7 @@ export default async function RfqPage(props: RfqPageProps) {
// 각 탭별로 데이터 프리패칭
// const allData = await getRfqs({ ...search, rfqCategory: "all" });
const generalData = await getRfqs({ ...search, rfqCategory: "general" });
+ const preBiddingData = await getRfqs({ ...search, rfqCategory: "pre_bidding" });
const itbData = await getRfqs({ ...search, rfqCategory: "itb" });
const rfqData = await getRfqs({ ...search, rfqCategory: "rfq" });
@@ -94,7 +98,7 @@ export default async function RfqPage(props: RfqPageProps) {
{/* 탭 컨테이너 */}
<Tabs defaultValue={currentTab} className="w-full flex-1 flex flex-col overflow-hidden">
- <TabsList className="grid w-full max-w-[600px] grid-cols-3 flex-shrink-0">
+ <TabsList className="grid w-full max-w-[800px] grid-cols-4 flex-shrink-0">
<TabsTrigger value="itb" className="relative">
<Package className="mr-2 h-4 w-4" />
@@ -123,6 +127,15 @@ export default async function RfqPage(props: RfqPageProps) {
</Badge>
)}
</TabsTrigger>
+ <TabsTrigger value="pre_bidding" className="relative">
+ <FileText className="mr-2 h-4 w-4" />
+ 사전견적(입찰)
+ {tabCounts.pre_bidding > 0 && (
+ <Badge variant="secondary" className="ml-2 text-xs">
+ {tabCounts.pre_bidding}
+ </Badge>
+ )}
+ </TabsTrigger>
</TabsList>
@@ -160,6 +173,40 @@ export default async function RfqPage(props: RfqPageProps) {
</React.Suspense>
</TabsContent>
+ {/* 사전견적(입찰) 탭 */}
+ <TabsContent value="pre_bidding" className="mt-4 flex-1 overflow-hidden relative">
+ <React.Suspense
+ fallback={
+ <DataTableSkeleton
+ columnCount={13}
+ searchableColumnCount={4}
+ filterableColumnCount={8}
+ cellWidths={[
+ "3rem", // checkbox
+ "9rem", // rfqCode
+ "7rem", // status
+ "8rem", // rfqType
+ "15rem", // rfqTitle
+ "8rem", // projectCode
+ "12rem", // projectName
+ "8rem", // picName
+ "5rem", // rfqSendDate
+ "5rem", // dueDate
+ "5rem", // vendorCount
+ "5rem", // quotationReceived
+ "5rem", // actions
+ ]}
+ shrinkZero
+ />
+ }
+ >
+ <RfqTable
+ data={preBiddingData}
+ rfqCategory="pre_bidding"
+ />
+ </React.Suspense>
+ </TabsContent>
+
{/* ITB 탭 */}
<TabsContent value="itb" className="mt-4 flex-1 overflow-hidden relative">
<React.Suspense